home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / chkdrive / chkdrive.asm next >
Encoding:
Assembly Source File  |  1993-07-08  |  2.2 KB  |  95 lines

  1. ;ドライブ・チェック・プログラム 「CHKDRIVE.COM」 ver. 1.02
  2. ;                    produced by AAM.
  3. ;    how to use.
  4. ;        chkdrive [ドライブ名]
  5. ;        リターンコードに指定ドライブの状態が返ります。
  6. ;       tab = 8
  7.  
  8. LF    equ    0ah
  9. CR    equ    0dh
  10. EOM    equ    '$'
  11. CAP    equ    11011111b
  12.  
  13. code    segment
  14.     assume    cs:code,ds:code,ss:code
  15.  
  16.     org    80h
  17. C_LINE    db    128 dup(?)    ;引数の取得
  18.  
  19. START:
  20.     cmp    C_LINE[4],CR    ;入力が二文字でない
  21.     jnz    short    L_ERR
  22.     cmp    C_LINE[3],':'    ;入力がドライブ名でない
  23.     jnz    short    L_ERR
  24.  
  25.     and    C_LINE[2],CAP    ;一文字目がアルファベット(大文字変換)
  26.     cmp    C_LINE[2],'A'    ;'A'より小さい
  27.     jb    short    L_ERR
  28.     cmp    C_LINE[2],'Z'    ;'Z'より大きい
  29.     ja    short    L_ERR
  30.  
  31.     mov    al,C_LINE[2]    ;ドライブ名をコマンドラインから入力
  32.     mov    DNAME[0],al
  33.  
  34.     mov    dx,offset C_ERR    ;致命的エラーの中断アドレスの変更
  35.     mov    ax,2524h    ;割り込みベクタのセット
  36.     int    21h
  37.  
  38.     mov    dx,offset DNAME    ;ファイルの新規作成(既存チェックあり)
  39.     mov    cx,00h        ;ファイル属性(R/W 通常ファイル)
  40.     mov    ah,5bh
  41.     int    21h
  42.  
  43.     jnc    short    F1    ;ファンクションエラーなし
  44.     cmp    RETCODE,0    ;今までにエラーがない
  45.     jnz    short    F2
  46.     mov    RETCODE,2    ;「存在しないユニット」を返す
  47.  
  48. F2:
  49.     cmp    ax,50h        ;ファイル作成の失敗(ファイルが既に存在する)
  50.     jnz    short    F1
  51.     mov    RETCODE,14    ;「ファイルの存在」エラーコードは14
  52.     mov    ah,9        ;「ファイルが既に存在する」エラーの表示
  53.     mov    dx,offset DNAME
  54.     int    21h
  55.     jmp    short    EXIT
  56.  
  57. F1:
  58.     mov    dx,offset DNAME    ;ファイルの削除
  59.     mov    ah,41h
  60.     int    21h
  61.  
  62. EXIT:
  63.     mov    al,RETCODE    ;引数をRETCODEにしてプログラムの終了
  64.     mov    ah,4ch
  65.     int    21h
  66.  
  67. L_ERR:                ;コマンドラインエラー
  68.     mov    ah,9
  69.     mov    dx,offset USAGE    ;使用説明
  70.     int    21h
  71.     mov    RETCODE,255
  72.     jmp    short    EXIT
  73.  
  74. C_ERR:                ;致命的エラー発生
  75.     push    cs        ;セグメント・レジスタの変更
  76.     pop    ds
  77.     mov    bx,di        ;エラーコード(上位ビットは不定)
  78.     inc    bx        ;エラーコードを1以上にする
  79.     mov    RETCODE,bl    ;エラーコードをRETCODEに保存
  80.     mov    al,0        ;エラー対処コード(エラーを無視)
  81.     iret
  82.  
  83. RETCODE    db    ?                ;エラーリターン用バッファ
  84. DNAME    db    'A:'                ;チェックするドライブ名
  85. FNAME    db    '\CHKDRIVE.TMP',0        ;オープンするファイル名
  86.     db    'が既に存在します。',CR,LF,EOM    ;ファイルのエラー
  87. USAGE    db    '/* CHKDRIVE.COM Ver. 1.02'    ;使用説明
  88.     db    ' By AAM. */',CR,LF
  89.     db    'CHKDRIVE [ドライブ名]',CR,LF
  90.     db    'リターンコードに指定ドライブの'
  91.     db    '状態が返ります。',CR,LF,EOM
  92.  
  93. code    ends
  94.     end    START
  95.